home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / ab20 / ab20_archive / utilities / system / intuition / sphinx-2.5y.lzh / SPHINX2.5y / Docs / Differences&Bugs.doc < prev    next >
Text File  |  1992-01-09  |  10KB  |  198 lines

  1.  
  2.                   Sphinx.doc v2.5b
  3.          © 1991, Nicolas Dade. All Rights Reserved
  4.  permission is hereby granted for non-commercial duplication and distribution
  5.           doc file for the SPHINX: AmigaDOS device
  6.  last revised: January 9th, 1992
  7.  
  8.             - - - - - - - - - - - - - - - - - -
  9.  
  10. Incompatibilities & Strange Differences with CON/NEWCON
  11.  
  12. SPHINX does not have a RAW mode.
  13.  
  14. The first SPHINX window opened prints an opening message before anything
  15. else.
  16.  
  17. The input buffer holds 255 bytes. Most characters take only one byte,
  18. allowing 255 characters/line, not including the final LF, like NEWCON.
  19. However characters C-@,C-A,C-B,C-C and C-D ($00 through $04) take three
  20. bytes to store.
  21.  
  22. When a SPHINX is shutting down, its window's title is cleared while the
  23. memory used by the text is being freed (before the window itself is closed).
  24. This is in order to give you a visual cue that SPHINX is shutting down.
  25.  
  26. When the first BELL character ($07) is printed, the bell file is loaded into
  27. memory. Thereafter that data is shared between all the SPHINX windows that
  28. are using the same bell file name (no longer just those that have the same
  29. configuration).
  30. Of course if the file is not found, if none is specified, or if the file is
  31. not understood, the screen is flashed, like NEWCON and CON (DisplayBeep()).
  32. When a BELL is seen in text being drawn to the window, the bell is rung (or
  33. the screen flashed) while the text is being drawn, and the BELL character is
  34. not saved. Thus the BELL character will not show up when you clip text. In
  35. order to ring the bell, a seperate task is created, which is used by all the
  36. SPHINXs. This task is given the same priority as the SPHINX that created it,
  37. which currently would be the first SPHINX set running in the machine.
  38. This allows the BELL to be used as an attention signal at the end of a long
  39. script: put an
  40.  echo "G"
  41. (control-G, of course, not just plain G) (and in fact, RA-L,C-G since C-G
  42. alone will just be interpreted as a command to un-defer the scrolling and
  43. un-stop the output)
  44. where you desire the bell to be rung, when the script reaches that point, the
  45. bell will be rung, making noise, which is better for attention getting
  46. purposes than flashing the screen (if you're, say, doing something in another
  47. room). Of course there are a multitude of other ways of achieving this same
  48. end, but it doesn't hurt to have one more.
  49.  
  50. When a FF (form feed, $0c) character is written to the window, instead of
  51. clearing the window and putting the cursor in the upper left corner, like
  52. CON/NEWCON, the current line is finished, and a line is drawn from the end of
  53. the current line to the right margin. This line is the same color as the
  54. window's borders. This line is two pixels high when the screen is interlaced
  55. (V_LACE). This is how the line following the startup message in the first
  56. window is drawn.
  57.  
  58. When a TAB ($09) is written to the window, the cursor is moved to the right
  59. modulo 8*(write font width) pixels from the left margin. If this is beyond
  60. the right edge, the a new line is started.
  61.  
  62. When a window is opened, but it is not going to fit in the screen, it is
  63. moved and/or shrunk so that that can be opened.
  64.  
  65. There are some programs that add menus to a CLI window. Some of these
  66. programs do not expect the window to not be handled by console.device, and
  67. may crash. (To be honest I have not found any which do not crash)
  68.  
  69. The only CSIs (command strings) understood by SPHINX are a window bounds
  70. request (CSI0 q) and those which deal with the color and style of the text
  71. (SGRs: Bold, Italics, UnderLine, Negative, TextColor, BackGroundColor and
  72. Reset). Also the only ESC codes understood by SPHINX are ESC[ as an equivalent
  73. to CSI and ESCc as a RESET. All others are stripped out of the text and
  74. ignored. This had to be done because things that made sense with the
  75. console.device no longer do so with SPHINX (like cursor up or down a line,
  76. etc...). Because of this, programs that use the cursor positioning facilities
  77. of CON/NEWCON to draw complicated text will print the same text with SPHINX,
  78. but on lines that follow each other, so the picture will come out wrong.
  79.  
  80. The CR (carriage return, $0d) and LF (line feed, $0a) characters are treated
  81. both as "finish current line, and move down one line and to the left margin."
  82. Therefore programs that write (Write()) lines of text that end (or start) with
  83. a CR, which with CON/NEWCON would have drawn over the old text, draw their
  84. text on a new line with SPHINX. This isn't so bad as it seems because SPHINX
  85. saves all these lines, so you can go back and look at them. (for example,
  86. search, diskformat & diskcopy do this)
  87.  
  88. When a block of text (one Write() or 32K or the tail of the old write buffer,
  89. which ever is smaller) is written to the window and that block would cause the
  90. window to scroll if it were drawn, the window is scrolled first, and then the
  91. visible tail of the block is drawn (CON/NEWCON would draw the text one line at
  92. a time, scrolling as they went). For large writes, this is much faster then
  93. drawing the text and then having it scroll off the window (you can always go
  94. back and look at that text any how) (to see the difference, try this in a
  95. SPHINX CLI and a NEWCON CLI: (if you are using arp, make sure that BCPL is
  96. TRUE by first typing
  97.  set BCPL TRUE
  98. )
  99.  copy longtextfile to *
  100. The NEWCON window will scroll along displaying the file. The SPHINX will jump
  101. along drawing only the tail of each Write() from copy).
  102.  
  103. Since I save the search string when searching, when you exit searching with
  104. S-DOWN I can restore the input buffer to what it was. NEWCON just leaves it
  105. blank.
  106.  
  107. When SPHINX receives a keystroke it does not understand it inserts it as if
  108. it were a literal, instead of ignoring it like CON/NEWCON do. This gives you
  109. a clue that SPHINX has not done something internal in response to this key,
  110. but rather just doesn't understand it. This also applies to ascii commands
  111. inside a string returned from a key mapped to a string (mapped by the default
  112. keymap, not SPHINX); the offending command is inserted into the input buffer.
  113.  
  114. See also below
  115.  
  116.             - - - - - - - - - - - - - - - - - -
  117.  
  118. Bugs & Problems & Things to Watch Out For with SPHINX:
  119.  
  120. There is a bug somewhere in the scroll gadget code. Sometimes whe cursor ends
  121. up in wild places (imagery only). FIX: if you notice this then resize the
  122. window (iconifying won't do it) (but RA-O will); a resize causes a lot of
  123. things to be recomputed from scratch, including the X,Y coordinates of the
  124. cursor.
  125.  
  126. SPHINX insists that the font you use fit at least one character per line. if
  127. it does not, SPHINX just draws over the borders of the window. This does not
  128. crash the machine, nor even SPHINX; it is just visually unsettling.
  129.  
  130. When the write font is drawn in italics, it can cover part of the borders of
  131. the window, and the parts of it that stick out are not scrolled with the
  132. rest, leaving you with little dots on either side of the window. This can
  133. also happen if either font is using kerning (and the kerning value is
  134. non-zero). All of this is harmless; just the imagery is messed up.
  135.  
  136.             - - - - - - - - - - - - - - - - - -
  137.  
  138. Extra for programers and equivalently knowledged users:
  139.  
  140. SPHINX dynamically allocates and frees memory as it goes along. If you are
  141. trying to tell if a program of yours is using memory by watching a memory
  142. meter, then you must not touch any SPHINX windows, nor cause any text to be
  143. written to them, etc... . SPHINXs do not allocate and free memory except in
  144. response to some external event (they don't wake up without you either
  145. causing some intuition msg or packet, or the timer's reply due to a
  146. WaitForChar packet you sent previously or the FileInserter bringing back
  147. some text...)
  148.  
  149. SPHINX does not use the console.device except for RawKeyConvert(). Therefore
  150. if you are hacking console.device (why would that marvelous piece of code
  151. need hacking?) you may use SPHINX for a CON/NEWCON if you let SPHINX use
  152. RawKeyConvert().
  153.  
  154. SPHINX understands these packet types:
  155. OpenOld, OpenNew, Update, Read, Write, WaitForChar, Close, DiskInfo. It does
  156. not understand Die because due to the way the bell task and the SPHINXs
  157. interact and the way unneeded hunks are freed, the Sphinx's code cannot be
  158. removed from the machine once they have been set running. (The Sphinx windows
  159. and tasks (processes, really) do, of course, come and go as needed.
  160.  
  161.             - - - - - - - - - - - - - - - - - -
  162.  
  163. How to speed SPHINX up:
  164. (approximately in order of greatest difference to least)
  165.  
  166. things to do to SPHINX:
  167. 1) Iconize the window.
  168. 2) Scroll backwards so that the cursor is out of sight.
  169. 3) Reduce the window's size.
  170. 4) Enable the config half-wd scrolling option.
  171. 5) Use the default font (or whatever font is speed up) for the write font (and
  172.    speed that font up using FF, BlitzFont, etc...).
  173. 6) To speed up user commanded scrolling of the window (arrow keys, scroll gg)
  174.    increase LineHeight and the write font's width (by changing fonts).
  175. 7) Change cursors: underline is fastest, followed by thinline, then thickline,
  176.    then block.
  177. 8) Fine tune MinWriteBufferLength to not be too small (too small is worse than
  178.    too large, although really too large is a waste too).
  179.  
  180. (things to do to the program talking to SPHINX:
  181. 1) BUFFER YOUR OUTPUT. Sending it one character at a time is not fast with
  182.    any device. Sending it one line at a time is better. SPHINX likes it even
  183.    more if you send it all in one great block (although note that doing this
  184.    with NEWCON can lead to text scrolling off the window without the user
  185.    being able to stop it).
  186. 2) If you are doing a lot of repeated writes, talk asynchronously with SPHINX.
  187.    If SPHINX detects your next write packet before it has completed the
  188.    previous, it will not draw and then erase the cursor, which saves time.
  189.    NOTE: your priority will almost have to be at least that of SPHINX in order
  190.    for this to happen, since the only time SPHINX sleeps when processing a
  191.    write is when it is waiting for the blitter to finish rendering the text,
  192.    etc..., but if your program is fast, it might be able to squeeze itself in
  193.    at a lower priority than SPHINX. (this is a minor change, and not really
  194.    worth the bother if it is just for speed)
  195.  
  196.             - - - - - - - - - - - - - - - - - -
  197.  
  198.